var threeSum = function(nums) {
    var numList = [];
    var nList = nums.sort((a, b) => a - b);
    // 如果有序数组第一个元素大于0，则返回null
    if(nList[i] > 0) return numList;
    for(var i = 0; i < nList.length; i++) {
        var left = i + 1, right = nums.length - 1;
        // 去重
        if(nList[i] == nList[i - 1]) continue;
        while(left < right) {
            var sum = nList[left] + nList[i] + nList[right];
            // 说明三数之和大了，right向左移动
            if(sum > 0) right--;
            // 说明三数之和小了，left向右移动
            else if(sum < 0) left++;
            else {
                numList.push([nList[i], nList[left], nList[right]]);
                // 去重
                while(nList[left] == nList[left + 1]){
                    left++;
                }
                while(nList[right] == nList[right - 1]) {
                    right--;
                }
                left++
                right--;
            }
        }  
    }
    return numList;
};